Fishing Optimal Control
We will solve an optimal control problem to maximize profit constrained by fish population
Problem Statement and Model
In this system out input is the rate of fishing $u$, and the profit $J$ will be defined in the objective to maximize. Our profit objective is represented as:
\[\begin{aligned} &&\max_{u(t)} J(t) \\ &&&&&J = \int_0^{10} \left(E - \frac{c}{x}\right) u U_{max} \, dt \\ &&\text{s.t.} &&& \frac{dx}{dt}= rx(t)\left(1 - \frac{x(t)}{k}\right) - uU_{max}, t \in [0,10] \\ &&&&&x(0) = 70 \\ &&&&&0 \leq u(t) \leq 1 \\ &&&&&E = 1, \; c = 17.5, \; r = 0.71, \; k = 80.5, \; U_{max} = 20 \\ &&&&&J(0) = 0 \\ \end{aligned}\]
Model Definition
First we must import $InfiniteOpt$ and other packages.
using InfiniteOpt, Ipopt, Plots;
Next we specify an array of initial conditions as well as problem variables.
x0 = 70
E, c, r, k, Umax = 1, 17.5, 0.71, 80.5, 20;
We initialize the infinite model and opt to use the Ipopt solver
m = InfiniteModel(Ipopt.Optimizer);
Now let's specify variables. $u$ is as our fishing rate. $x$ will be used to model the fish population in response to $u$ the infinite parameter $t$ that will span over 10 years.
@infinite_parameter(m, t in [0,10],num_supports=100)
@variable(m, 1 <= x, Infinite(t))
@variable(m, 0 <= u <= 1, Infinite(t));
$J$ represents profit over time.
@variable(m, J, Infinite(t));
Specifying the objective to maximize profit $J$:
@objective(m, Max, J(10));
Define the ODEs which serve as our system model.
@constraint(m, ∂(J,t) == (E-c/x) * u * Umax)
@constraint(m, ∂(x,t) == r * x *(1 - x/k) - u*Umax);
Set our initial conditions.
@constraint(m, x(0) == x0)
@constraint(m, J(0) == 0);
Problem Solution
Optimize the model:
optimize!(m)
******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
Ipopt is released as open source code under the Eclipse Public License (EPL).
For more information visit https://github.com/coin-or/Ipopt
******************************************************************************
This is Ipopt version 3.14.4, running with linear solver MUMPS 5.4.1.
Number of nonzeros in equality constraint Jacobian...: 1296
Number of nonzeros in inequality constraint Jacobian.: 0
Number of nonzeros in Lagrangian Hessian.............: 400
Total number of variables............................: 500
variables with only lower bounds: 100
variables with lower and upper bounds: 100
variables with only upper bounds: 0
Total number of equality constraints.................: 400
Total number of inequality constraints...............: 0
inequality constraints with only lower bounds: 0
inequality constraints with lower and upper bounds: 0
inequality constraints with only upper bounds: 0
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
0 0.0000000e+00 6.90e+01 1.45e+00 -1.0 0.00e+00 - 0.00e+00 0.00e+00 0
1 -1.8548441e+00 6.89e+01 1.12e+01 -1.0 9.50e+03 -2.0 1.44e-04 1.76e-03h 1
2 -2.6101623e+00 6.88e+01 1.12e+01 -1.0 3.84e+03 -1.6 3.43e-04 7.39e-04h 1
3 -8.1519321e+00 6.85e+01 5.40e+01 -1.0 3.34e+03 -2.1 1.00e-03 4.91e-03h 1
4 -1.5382109e+01 6.80e+01 6.91e+01 -1.0 2.26e+03 -2.5 1.14e-03 7.62e-03f 4
5 -2.3521800e+01 6.72e+01 6.64e+01 -1.0 2.27e+03 - 1.32e-02 1.07e-02h 3
6 -3.2524402e+01 6.62e+01 6.32e+01 -1.0 1.67e+03 - 2.84e-02 1.51e-02h 2
7 -3.9860630e+01 6.51e+01 5.06e+01 -1.0 9.09e+02 - 8.43e-02 1.60e-02h 1
8 -4.5178330e+01 6.40e+01 3.21e+01 -1.0 2.71e+03 - 3.44e-02 1.70e-02h 1
9 -4.9707626e+01 6.30e+01 3.08e+01 -1.0 1.38e+03 - 1.50e-02 1.62e-02h 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
10 -5.3966386e+01 6.19e+01 3.24e+01 -1.0 2.10e+03 - 1.11e-02 1.72e-02h 1
11 -5.5735727e+01 6.14e+01 3.15e+01 -1.0 3.23e+03 - 1.00e-02 9.14e-03h 1
12 -5.7438744e+01 6.07e+01 3.26e+01 -1.0 2.39e+03 - 7.16e-03 1.01e-02f 1
13 -5.6890891e+01 6.02e+01 3.64e+01 -1.0 4.84e+03 - 2.54e-03 8.82e-03f 1
14 -5.6868789e+01 5.97e+01 3.60e+01 -1.0 1.10e+04 - 2.31e-03 7.95e-03f 2
15 -5.7110966e+01 5.95e+01 3.69e+01 -1.0 1.97e+03 -2.1 3.18e-03 3.64e-03h 1
16 -5.9420322e+01 5.84e+01 4.18e+01 -1.0 1.70e+03 -2.6 3.38e-03 1.82e-02f 1
17 -5.9499934e+01 5.83e+01 3.16e+01 -1.0 1.14e+03 -2.2 1.21e-02 1.23e-03h 1
18 -6.0120020e+01 5.75e+01 4.82e+01 -1.0 1.34e+03 -1.7 8.68e-03 1.48e-02h 1
19 -6.0855779e+01 5.70e+01 4.78e+01 -1.0 1.92e+03 -2.2 5.24e-03 8.16e-03f 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
20 -6.0963105e+01 5.69e+01 3.59e+01 -1.0 2.14e+03 -1.8 6.02e-03 1.80e-03f 1
21 -7.3097711e+01 5.62e+01 4.14e+01 -1.0 2.01e+03 -2.3 1.80e-03 1.27e-02f 1
22 -7.3128660e+01 5.61e+01 1.23e+02 -1.0 1.21e+03 -0.9 8.10e-03 1.26e-03h 1
23 -7.3128600e+01 5.61e+01 1.53e+03 -1.0 2.73e+03 -0.5 8.41e-03 9.58e-05h 1
24 -7.3194926e+01 5.46e+01 7.12e+02 -1.0 3.17e+03 -1.0 7.53e-03 2.73e-02f 1
25 -7.3257003e+01 5.42e+01 8.00e+02 -1.0 9.45e+02 -0.6 3.10e-02 7.73e-03f 1
26 -7.3260596e+01 5.41e+01 6.85e+02 -1.0 1.39e+03 -1.0 3.96e-02 5.10e-04h 1
27 -7.3243186e+01 5.33e+01 4.89e+03 -1.0 1.62e+03 -0.6 9.60e-02 1.49e-02h 1
28 -7.3562367e+01 5.20e+01 4.65e+03 -1.0 9.38e+02 -1.1 3.48e-02 2.43e-02f 1
29 -7.3562754e+01 5.19e+01 4.54e+03 -1.0 7.25e+02 -0.7 1.17e-01 1.67e-03h 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
30 -7.3601727e+01 5.06e+01 2.75e+03 -1.0 8.08e+02 -1.1 2.21e-01 2.56e-02f 1
31 -7.3564204e+01 4.97e+01 2.75e+03 -1.0 6.83e+02 -0.7 1.07e-01 1.85e-02h 1
32 -7.3354094e+01 4.83e+01 2.33e+03 -1.0 7.15e+02 -1.2 8.51e-02 2.78e-02h 1
33 -7.4140801e+01 4.62e+01 2.38e+03 -1.0 6.32e+02 -1.7 1.86e-02 4.24e-02f 1
34 -7.4005422e+01 4.58e+01 2.31e+03 -1.0 4.26e+02 -1.2 2.17e-02 1.05e-02h 1
35 -7.3322693e+01 4.52e+01 2.34e+03 -1.0 6.08e+02 -1.7 1.06e-04 1.22e-02h 2
36 -7.3322182e+01 4.52e+01 2.34e+03 -1.0 3.86e+02 -0.4 5.12e-02 9.72e-04h 1
37 -7.3320101e+01 4.51e+01 2.34e+03 -1.0 3.79e+02 -0.9 1.03e-01 2.85e-04h 1
38 -7.2740498e+01 4.39e+01 2.02e+03 -1.0 5.38e+02 -1.3 1.35e-01 2.71e-02h 1
39 -7.1494967e+01 4.25e+01 1.90e+03 -1.0 7.55e+02 -1.8 4.60e-02 3.14e-02f 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
40 -7.1303816e+01 4.22e+01 1.70e+03 -1.0 4.84e+02 -1.4 1.68e-01 7.67e-03h 1
41 -6.9076988e+01 4.05e+01 1.72e+03 -1.0 7.80e+02 -1.9 8.20e-03 4.05e-02f 1
42 -6.8670764e+01 4.00e+01 1.71e+03 -1.0 5.03e+02 -1.4 2.04e-03 1.20e-02h 1
43 -6.8670059e+01 3.99e+01 1.64e+03 -1.0 4.17e+02 -1.0 4.93e-02 1.68e-03h 1
44 -6.8217597e+01 3.94e+01 1.64e+03 -1.0 5.28e+02 -1.5 9.99e-04 1.35e-02h 1
45 -6.8217600e+01 3.94e+01 1.06e+03 -1.0 4.19e+02 -1.1 4.44e-01 5.82e-04h 1
46 -6.7829597e+01 3.88e+01 1.04e+03 -1.0 5.65e+02 -1.5 2.25e-02 1.55e-02h 1
47 -6.7829360e+01 3.88e+01 1.09e+03 -1.0 2.42e+02 -1.1 9.46e-02 4.30e-05h 1
48 -6.7126779e+01 3.79e+01 1.04e+03 -1.0 5.82e+02 -1.6 6.16e-02 2.22e-02h 1
49 -6.5035328e+01 3.67e+01 9.60e+02 -1.0 8.41e+02 -2.1 4.71e-02 3.14e-02f 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
50 -6.4848900e+01 3.65e+01 8.97e+02 -1.0 4.10e+02 -1.6 8.20e-02 5.41e-03h 1
51 -6.3399398e+01 3.59e+01 9.20e+02 -1.0 1.15e+03 -2.1 5.92e-05 1.82e-02f 1
52 -6.3456144e+01 3.58e+01 9.15e+02 -1.0 6.57e+02 -1.7 4.75e-03 1.62e-03h 1
53 -6.3455839e+01 3.58e+01 8.90e+02 -1.0 2.49e+02 -1.3 1.37e-01 4.21e-05h 1
54 -6.3032678e+01 3.55e+01 8.74e+02 -1.0 7.61e+02 -1.7 6.36e-02 8.98e-03h 1
55 -6.1824398e+01 3.49e+01 7.86e+02 -1.0 1.23e+03 -2.2 5.55e-02 1.69e-02f 1
56 -6.1364426e+01 3.46e+01 8.19e+02 -1.0 9.11e+02 -1.8 9.50e-02 9.23e-03h 1
57 -6.0129444e+01 3.40e+01 7.71e+02 -1.0 1.62e+03 -2.3 3.77e-02 1.61e-02f 1
58 -5.9734940e+01 3.38e+01 8.34e+02 -1.0 1.24e+03 -1.8 5.82e-02 7.00e-03h 1
59 -5.8350497e+01 3.32e+01 7.76e+02 -1.0 1.73e+03 -2.3 4.48e-02 1.77e-02f 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
60 -5.8193932e+01 3.31e+01 8.72e+02 -1.0 1.51e+03 -1.9 3.61e-02 2.41e-03h 1
61 -5.7061025e+01 3.23e+01 9.41e+02 -1.0 1.21e+03 -1.5 3.32e-02 2.30e-02h 1
62 -5.6813418e+01 3.22e+01 8.97e+02 -1.0 1.80e+03 -1.9 4.64e-02 2.86e-03h 1
63 -5.5466597e+01 3.17e+01 1.01e+03 -1.0 1.90e+03 -1.5 3.11e-02 1.77e-02f 1
64 -5.5101243e+01 3.15e+01 8.42e+02 -1.0 2.41e+03 -2.0 5.04e-02 3.62e-03f 1
65 -5.3850249e+01 3.11e+01 9.45e+02 -1.0 1.93e+03 -1.6 3.72e-02 1.52e-02f 1
66 -5.3096884e+01 3.08e+01 7.67e+02 -1.0 2.46e+03 -2.1 4.50e-02 7.37e-03f 1
67 -5.2290717e+01 3.05e+01 8.18e+02 -1.0 1.63e+03 -1.6 4.92e-02 1.09e-02f 1
68 -5.0588693e+01 3.00e+01 7.09e+02 -1.0 2.52e+03 -2.1 4.00e-02 1.69e-02f 1
69 -5.0489585e+01 3.00e+01 9.83e+02 -1.0 1.87e+03 -1.7 3.76e-02 1.05e-03h 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
70 -4.9134395e+01 2.95e+01 1.43e+03 -1.0 1.97e+03 -1.3 3.15e-02 1.57e-02h 1
71 -4.8632725e+01 2.93e+01 8.27e+02 -1.0 1.37e+03 -1.7 1.35e-01 7.43e-03f 1
72 -4.7943317e+01 2.91e+01 8.94e+02 -1.0 1.97e+03 -1.3 5.16e-02 7.39e-03h 1
73 -4.6683140e+01 2.86e+01 7.09e+02 -1.0 1.74e+03 -1.8 7.91e-02 1.51e-02f 1
74 -4.6159915e+01 2.84e+01 1.03e+03 -1.0 1.85e+03 -1.4 5.81e-02 5.70e-03h 1
75 -4.4916268e+01 2.80e+01 8.19e+02 -1.0 1.62e+03 -1.8 1.25e-01 1.54e-02f 1
76 -4.3659851e+01 2.76e+01 9.19e+02 -1.0 1.78e+03 -1.4 5.19e-02 1.42e-02f 1
77 -4.2685045e+01 2.73e+01 7.77e+02 -1.0 1.14e+03 -1.9 6.46e-02 1.25e-02f 1
78 -4.1715907e+01 2.69e+01 8.59e+02 -1.0 1.45e+03 -1.5 7.60e-02 1.33e-02f 1
79 -4.1536796e+01 2.69e+01 2.46e+03 -1.0 1.67e+03 -1.0 5.38e-02 2.04e-03h 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
80 -3.9505143e+01 2.63e+01 2.57e+03 -1.0 1.92e+03 -1.5 1.17e-01 2.10e-02f 1
81 -3.9261344e+01 2.62e+01 4.63e+03 -1.0 1.67e+03 -1.1 7.26e-02 2.62e-03h 1
82 -3.7319263e+01 2.56e+01 3.87e+03 -1.0 1.71e+03 -1.6 1.21e-01 2.17e-02f 1
83 -3.6890910e+01 2.55e+01 4.84e+03 -1.0 1.56e+03 -1.1 5.98e-02 4.95e-03h 1
84 -3.5415475e+01 2.50e+01 1.37e+03 -1.0 1.38e+03 -1.6 5.03e-01 2.00e-02f 1
85 -3.4977944e+01 2.49e+01 1.33e+03 -1.0 1.37e+03 -1.2 4.98e-02 5.82e-03h 1
86 -3.2681391e+01 2.41e+01 1.17e+03 -1.0 1.22e+03 -1.7 1.08e-01 2.93e-02f 1
87 -3.2089428e+01 2.39e+01 1.28e+03 -1.0 9.14e+02 -1.2 8.53e-02 1.07e-02f 1
88 -3.0601593e+01 2.33e+01 1.19e+03 -1.0 1.52e+03 -1.7 5.54e-02 2.22e-02f 1
89 -3.0414453e+01 2.33e+01 1.44e+03 -1.0 1.37e+03 -1.3 5.10e-02 2.59e-03h 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
90 -2.8883251e+01 2.28e+01 1.81e+03 -1.0 1.35e+03 -0.9 4.19e-02 2.25e-02h 1
91 -2.8604526e+01 2.27e+01 1.10e+03 -1.0 7.49e+02 -1.3 1.49e-01 4.94e-03f 1
92 -2.6795922e+01 2.21e+01 1.65e+03 -1.0 1.42e+03 -0.9 6.76e-02 2.43e-02f 1
93 -2.6384215e+01 2.19e+01 1.59e+03 -1.0 6.86e+02 -1.4 1.18e-01 7.13e-03f 1
94 -2.4667113e+01 2.14e+01 1.55e+03 -1.0 1.22e+03 -1.0 9.46e-02 2.57e-02f 1
95 -2.4050371e+01 2.12e+01 1.64e+03 -1.0 1.26e+03 -1.4 7.16e-02 9.70e-03f 1
96 -2.2952320e+01 2.07e+01 1.55e+03 -1.0 9.55e+02 -1.0 1.28e-01 2.03e-02f 1
97 -2.1651553e+01 2.03e+01 2.02e+03 -1.0 1.23e+03 -1.5 6.64e-02 2.22e-02f 1
98 -2.1339534e+01 2.01e+01 2.27e+03 -1.0 6.55e+02 -1.1 1.42e-01 7.73e-03h 1
99 -1.9810587e+01 1.96e+01 2.22e+03 -1.0 1.24e+03 -1.5 3.00e-02 2.87e-02f 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
100 -1.9789527e+01 1.95e+01 1.66e+03 -1.0 7.67e+02 -1.1 6.73e-02 4.09e-04h 1
101 -1.9035245e+01 1.93e+01 2.47e+03 -1.0 1.19e+03 -0.7 4.96e-02 1.23e-02h 1
102 -1.7958849e+01 1.89e+01 1.66e+03 -1.0 9.17e+02 -1.2 1.88e-01 2.32e-02f 1
103 -1.7839533e+01 1.88e+01 2.54e+03 -1.0 1.02e+03 -0.7 5.52e-02 2.06e-03h 1
104 -1.5864912e+01 1.82e+01 2.86e+03 -1.0 1.13e+03 -1.2 2.91e-01 3.48e-02f 1
105 -1.5730765e+01 1.81e+01 3.55e+03 -1.0 8.96e+02 -0.8 6.44e-02 2.56e-03h 1
106 -1.3918597e+01 1.75e+01 2.61e+03 -1.0 1.02e+03 -1.3 3.92e-01 3.59e-02f 1
107 -1.3661064e+01 1.74e+01 3.22e+03 -1.0 9.06e+02 -0.8 7.08e-02 5.18e-03h 1
108 -1.2141322e+01 1.68e+01 2.28e+03 -1.0 8.92e+02 -1.3 3.08e-01 3.53e-02f 1
109 -1.1820357e+01 1.66e+01 2.73e+03 -1.0 8.79e+02 -0.9 7.29e-02 6.92e-03h 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
110 -1.0470735e+01 1.61e+01 2.07e+03 -1.0 8.08e+02 -1.4 1.93e-01 3.55e-02f 1
111 -1.0092830e+01 1.59e+01 2.39e+03 -1.0 8.38e+02 -0.9 6.84e-02 8.71e-03h 1
112 -8.9362268e+00 1.54e+01 1.89e+03 -1.0 7.48e+02 -1.4 1.48e-01 3.51e-02f 1
113 -8.8973388e+00 1.53e+01 2.22e+03 -1.0 7.99e+02 -1.0 6.82e-02 9.47e-04h 1
114 -7.3394611e+00 1.47e+01 1.71e+03 -1.0 8.68e+02 -1.5 2.36e-01 4.38e-02f 1
115 -7.1678181e+00 1.46e+01 1.77e+03 -1.0 7.67e+02 -1.0 2.99e-02 4.40e-03h 1
116 -5.8225120e+00 1.40e+01 1.56e+03 -1.0 8.27e+02 -1.5 1.09e-01 4.47e-02f 1
117 -5.8036955e+00 1.39e+01 1.55e+03 -1.0 5.72e+02 -1.1 4.36e-03 5.91e-04h 1
118 -5.7382571e+00 1.39e+01 1.64e+03 -1.0 6.54e+02 -0.7 6.56e-03 1.91e-03h 1
119 -3.9054193e+00 1.33e+01 1.58e+03 -1.0 8.48e+02 -1.1 9.19e-03 4.77e-02f 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
120 -3.7041292e+00 1.31e+01 1.51e+03 -1.0 3.70e+02 -0.7 7.69e-02 1.18e-02f 1
121 -3.6377737e+00 1.31e+01 1.56e+03 -1.0 7.09e+02 -1.2 8.31e-02 1.97e-03h 1
122 -1.8613929e+00 1.24e+01 1.51e+03 -1.0 7.26e+02 -0.8 5.35e-02 5.14e-02h 1
123 -1.6162676e+00 1.22e+01 2.61e+03 -1.0 3.30e+02 -1.3 1.65e-01 1.63e-02f 1
124 -1.5481784e+00 1.22e+01 1.91e+03 -1.0 5.76e+02 -0.8 8.61e-02 2.34e-03h 1
125 3.1072948e-01 1.14e+01 2.16e+03 -1.0 6.09e+02 -1.3 1.40e-01 6.60e-02f 1
126 3.3714868e-01 1.13e+01 1.83e+03 -1.0 2.42e+02 -0.9 1.19e-01 1.39e-03h 1
127 2.2848921e+00 1.22e+01 1.84e+03 -1.0 5.63e+02 -1.4 1.34e-01 7.54e-02f 1
128 2.3059194e+00 1.22e+01 1.62e+03 -1.0 2.13e+02 -0.9 1.34e-01 1.38e-03h 1
129 4.2406555e+00 1.29e+01 1.56e+03 -1.0 4.99e+02 -1.4 1.30e-01 8.58e-02f 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
130 4.2586307e+00 1.29e+01 1.41e+03 -1.0 1.85e+02 -1.0 1.59e-01 1.49e-03h 1
131 6.1449014e+00 1.32e+01 1.29e+03 -1.0 4.31e+02 -1.5 1.14e-01 9.92e-02f 1
132 6.1601663e+00 1.32e+01 1.22e+03 -1.0 1.55e+02 -1.0 1.70e-01 1.66e-03h 1
133 7.9617183e+00 1.33e+01 1.04e+03 -1.0 3.61e+02 -1.5 7.61e-02 1.17e-01f 1
134 7.9735970e+00 1.33e+01 1.02e+03 -1.0 1.28e+02 -1.1 1.92e-01 1.83e-03h 1
135 9.7217174e+00 1.36e+01 7.88e+02 -1.0 2.93e+02 -1.6 2.36e-02 1.46e-01f 1
136 9.7344137e+00 1.36e+01 7.87e+02 -1.0 1.58e+02 -1.1 4.79e-03 1.33e-03h 1
137 9.7213999e+00 1.36e+01 7.80e+02 -1.0 5.30e+01 -0.7 3.42e-01 3.68e-03h 1
138 1.1088817e+01 1.17e+01 6.57e+02 -1.0 2.08e+02 -1.2 1.55e-01 1.72e-01f 1
139 1.1111937e+01 1.16e+01 7.56e+02 -1.0 8.27e+01 -1.7 1.45e-01 4.63e-03h 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
140 1.1167678e+01 1.15e+01 7.21e+02 -1.0 1.47e+02 -1.2 2.54e-01 1.03e-02h 1
141 1.2654012e+01 9.05e+00 4.92e+02 -1.0 1.52e+02 -1.7 6.51e-02 1.94e-01f 1
142 1.2673877e+01 9.02e+00 4.84e+02 -1.0 6.31e+01 -1.3 2.53e-01 3.88e-03h 1
143 6.2086126e+01 5.32e+01 4.31e+02 -1.0 4.07e+02 -1.8 1.94e-03 1.93e-01f 1
144 6.2103083e+01 5.31e+01 4.29e+02 -1.0 2.68e+01 -0.4 1.92e-01 1.61e-03h 1
145 6.3033841e+01 5.27e+01 4.25e+02 -1.0 1.70e+02 -0.9 7.82e-02 8.19e-03f 1
146 6.3251927e+01 5.08e+01 7.97e+02 -1.0 5.15e+01 -0.5 5.52e-01 3.60e-02h 1
147 6.5182177e+01 4.97e+01 8.01e+02 -1.0 1.51e+02 -1.0 1.09e-01 2.29e-02f 1
148 6.5182459e+01 4.58e+01 9.03e+02 -1.0 4.96e+01 -0.5 1.00e+00 7.91e-02h 1
149 6.8202423e+01 4.44e+01 8.53e+02 -1.0 2.73e+02 -1.0 9.45e-02 2.94e-02f 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
150 6.8065503e+01 4.29e+01 7.22e+02 -1.0 4.44e+01 -0.6 2.99e-01 3.31e-02h 1
151 6.7297726e+01 3.93e+01 1.04e+03 -1.0 4.29e+01 -0.2 1.00e+00 8.57e-02f 1
152 6.6123025e+01 2.69e+01 3.79e+02 -1.0 3.92e+01 -0.6 1.00e+00 3.14e-01f 1
153 6.9614800e+01 2.36e+01 3.24e+02 -1.0 8.34e+01 -1.1 7.23e-02 1.24e-01f 1
154 6.9223563e+01 2.14e+01 2.96e+02 -1.0 2.36e+01 -0.7 2.70e-01 9.42e-02h 1
155 7.0183974e+01 2.09e+01 2.90e+02 -1.0 9.42e+01 -1.2 1.26e-02 2.02e-02f 1
156 6.9343580e+01 1.60e+01 2.19e+02 -1.0 2.10e+01 -0.7 8.00e-02 2.36e-01f 1
157 7.1746595e+01 1.49e+01 2.00e+02 -1.0 8.52e+01 -1.2 7.49e-03 6.86e-02f 1
158 7.1331002e+01 1.10e+01 1.47e+02 -1.0 1.49e+01 -0.8 1.96e-01 2.60e-01f 1
159 7.0796673e+01 8.97e+00 1.19e+02 -1.0 1.11e+01 -0.4 1.56e-01 1.84e-01f 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
160 7.0082508e+01 1.47e+00 6.12e+01 -1.0 9.23e+00 -0.8 1.97e-01 1.00e+00f 1
161 7.2341708e+01 2.67e-01 5.63e+00 -1.0 3.48e+00 -1.3 8.76e-01 1.00e+00f 1
162 7.8052484e+01 1.51e+00 7.21e-01 -1.0 8.12e+00 -1.8 8.87e-01 1.00e+00f 1
163 9.1342733e+01 7.67e+00 1.46e+00 -1.7 1.82e+01 -2.3 6.37e-01 1.00e+00f 1
164 9.6125327e+01 9.75e+00 1.51e+00 -1.7 3.94e+02 - 1.05e-02 2.91e-02f 1
165 1.0167084e+02 8.10e+00 9.41e-01 -1.7 3.09e+01 - 3.08e-01 1.79e-01f 1
166 1.0773504e+02 6.04e+00 6.85e-01 -1.7 4.77e+01 - 2.41e-01 2.65e-01f 1
167 1.0889469e+02 4.35e+00 5.04e-01 -1.7 4.25e+01 - 5.68e-01 2.65e-01h 1
168 1.0859790e+02 2.56e+00 2.94e-01 -1.7 2.44e+01 - 5.95e-01 4.19e-01h 1
169 1.0646389e+02 9.76e-02 1.31e-02 -1.7 3.27e+00 - 1.00e+00 1.00e+00h 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
170 1.0666353e+02 4.11e-02 3.24e-03 -2.5 1.84e+00 - 1.00e+00 1.00e+00h 1
171 1.0668828e+02 2.62e-03 8.97e-05 -2.5 8.14e-01 - 1.00e+00 1.00e+00h 1
172 1.0679293e+02 2.87e-03 1.77e-03 -3.8 6.40e-01 - 9.31e-01 1.00e+00h 1
173 1.0680098e+02 1.30e-03 2.08e-05 -3.8 7.68e-01 - 1.00e+00 1.00e+00h 1
174 1.0680837e+02 5.09e-04 3.67e-04 -5.7 4.38e-01 - 8.89e-01 1.00e+00h 1
175 1.0680859e+02 1.06e-04 2.30e-06 -5.7 2.91e-01 - 9.99e-01 1.00e+00h 1
176 1.0680861e+02 1.70e-05 7.27e-08 -5.7 1.43e-01 - 1.00e+00 1.00e+00h 1
177 1.0680871e+02 2.01e-06 9.79e-07 -8.6 4.62e-02 - 9.92e-01 1.00e+00h 1
178 1.0680871e+02 1.11e-08 4.69e-11 -8.6 3.84e-03 - 1.00e+00 1.00e+00h 1
Number of Iterations....: 178
(scaled) (unscaled)
Objective...............: -1.0680870535788368e+02 1.0680870535788368e+02
Dual infeasibility......: 4.6904191760237619e-11 4.6904191760237619e-11
Constraint violation....: 3.3759715561796893e-09 1.1140706135392975e-08
Variable bound violation: 6.9528054424949914e-09 6.9528054424949914e-09
Complementarity.........: 4.4418868744387556e-09 4.4418868744387556e-09
Overall NLP error.......: 4.4418868744387556e-09 1.1140706135392975e-08
Number of objective function evaluations = 193
Number of objective gradient evaluations = 179
Number of equality constraint evaluations = 193
Number of inequality constraint evaluations = 0
Number of equality constraint Jacobian evaluations = 179
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations = 178
Total seconds in IPOPT = 4.281
EXIT: Optimal Solution Found.
Extract the results.
ts = value(t)
u_opt = value(u)
x_opt = value(x)
J_opt = value(J);
p1 = plot(ts, [x_opt, J_opt] ,
label=["Fish Pop" "Profit"],
title="State Variables")
p2 = plot(ts, u_opt,
label = "Rate",
title = "Rate vs Time")
plot(p1,p2 ,layout=(2,1), size=(800,600));
Maintenance Tests
These are here to ensure this example stays up to date.
using Test
@test termination_status(m) == MOI.LOCALLY_SOLVED
@test has_values(m)
@test u_opt isa Vector{<:Real}
@test J_opt isa Vector{<:Real}
Test Passed
This page was generated using Literate.jl.